/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BL;

import BE.BEContrasenha;
import BE.BEUsuario;
import DA.DAContrasenhas;
import java.util.ArrayList;

/**
 *
 * @author hunter2409
 */
public class BLContrasenha {
    
    private ArrayList<BEContrasenha> lstContrasenhas;
    private DAContrasenhas dtaContrasenha;
    private BLParametrosSeguridad objGestorParametros;
    public BLContrasenha()
    {
        lstContrasenhas= new ArrayList<BEContrasenha>();
        dtaContrasenha= new DAContrasenhas();
        objGestorParametros = new BLParametrosSeguridad();
    }

    public ArrayList<BEContrasenha> getLstContrasenhas() {
        return lstContrasenhas;
    }

    public void setLstContrasenhas(ArrayList<BEContrasenha> lstContrasenhas) {
        this.lstContrasenhas = lstContrasenhas;
    }

    public DAContrasenhas getDtaContrasenha() {
        return dtaContrasenha;
    }

    public void setDtaContrasenha(DAContrasenhas dtaContrasenha) {
        this.dtaContrasenha = dtaContrasenha;
    }
    
    public void cargar()
    {
        lstContrasenhas = dtaContrasenha.obtenerContrasenhas();
    }

    
    public String insertar(BEContrasenha objContrasenha) {
        return dtaContrasenha.insertar(objContrasenha);
    }
    
    public boolean validarContrasenha(String contrasenha)
    {
        objGestorParametros.cargar();
        
        int nCaracteres=0;
        int nNumeros=0;
        int tamanho=0;
        
        for (int i=0;i<contrasenha.length();i++)
        {
            if (Character.isDigit(contrasenha.charAt(i))) nNumeros++;
            else nCaracteres++;
            tamanho++;
        }
        
        if ( (nCaracteres>=objGestorParametros.getObjParametros().getnCaractNoNum())&&(nNumeros>=objGestorParametros.getObjParametros().getnCaractNum()) && (tamanho>=objGestorParametros.getObjParametros().getLongMinima()) ) return true;
        
        
        return false;
    }
    
    public ArrayList<BEContrasenha> obtenerContrasenhasIdUsuario(int idUsuario)
    {
        ArrayList<BEContrasenha> lstAux = new ArrayList<BEContrasenha>();
        
        for (BEContrasenha cont:lstContrasenhas)
        {
            if (cont.getIdUsuario()==idUsuario) lstAux.add(cont);
        }
        
        return lstAux;
        
    }

    public BEContrasenha obtenerContrasenhaActualIdUsuario(int idUsuario) {
        
        for (BEContrasenha cont:lstContrasenhas)
        {
            if ((cont.getIdUsuario()==idUsuario)&&(cont.getEstado().equals("ACTIVO"))) return cont;
        }
        return null;
    }

    public String actualizar(BEContrasenha objContrasenha) {
        if(objContrasenha!=null)
        return dtaContrasenha.actualizar(objContrasenha);
        else return "1";
    }

    public boolean validarUltimasContrasenhas(String contrasenha, BEUsuario usuario) {
        
        objGestorParametros.cargar();
        ArrayList<BEContrasenha> lstCont = obtenerContrasenhasIdUsuario(usuario.getIdUsuario());
        int cantContHist=objGestorParametros.getObjParametros().getnContrasenhaHistoricas();
        int cantCont=lstCont.size();
        int j=cantContHist;
        
        for(int i=cantCont-1;i>=0;i--)
        {
            
            if (lstCont.get(i).getContrasenha().equals(contrasenha)) return false;
            j--;
            if (j==0) break;
        }
        
        return true;
                
        
    }

        
}
